/*
srkrt_dynamic_stack.h
Ce fichier contient les protoypes des fonctions utilisées pour manipuler la pile.
*/
#ifndef INCLUDE_SRKRT_DYNAMIC_STACK
#define INCLUDE_SRKRT_DYNAMIC_STACK
#include "srkrt_others_struct.h"

/* ---------------------------------------
	Declaration des fonctions 
--------------------------------------- */

typedef struct s_Stack {
	Cel* head ;
	unsigned int size ; /* peut etre utile pour l'ia ? */
	
} Stack ;

/*
Nom : stack_create
Fct : cree une nouvelle pile
Entree : 
Sortie : Stack
*/
Stack stack_create(void);

/*
Nom : stack_create_copy_revert
Fct : copy la pile passé en paramètre en inversant l'ordre
Entree : Stack
Sortie : Stack
*/
Stack stack_create_copy_revert(Stack* from);

/*
Nom : stack_is_empty
Fct : détermine si une Stack est vide
Entree : Stack
Sortie : booléen
*/
bool stack_is_empty(Stack* s);

/*
Nom : stack_add
Fct : ajoute un élément à un Stack
Entree : adresse d'une Stack, Element
Sortie : -
*/
void stack_add(Stack* s, Move m);

/*
Nom : stack_remove
Fct : supprime l'élément de tete à un Stack
Entree : adresse d'une Stack
Sortie : -
*/
void stack_remove(Stack* s);

/*
Nom : stack_destroy
Fct : supprimer une Stack
Entree : Stack
*/

void stack_destroy(Stack* s);
/*
Nom : stack_head
Fct : retourne l'élément de tete de la Stack
Entree : Stack
Sortie : Move
*/
Move stack_head(Stack *s);

/*
Nom : stack_size
Fct : retourne la taille de la pile
Entree : stack
Sortie : unsiged int
*/
unsigned int stack_size(Stack* s);
	
/*
Nom : stack_map
Fct : Applique la fonction f à tous les elements de la pile 
*/
/*void stack_map(void (*f)(void*), Stack* stack, void* data);*/


#endif
